declare namespace MiYaGame {

    /**
     * 设备
     */
    export module Device {
        /**
         *     -- 描述：振动
         *     -- 参数：
         *     --  number  |  持续时长（ms）
         */
        function vibrate(number : number)
    }

    /**
     * 游戏生命周期相关
     */
    export module GameLife {
        /**
         *     -- 描述：游戏加载开始及过程调用
         *     -- 参数：
         *     -- progress | 进度 0-100
         */
        function gameLoading(progress : number)

        /**
         *     -- 描述：游戏加载启动成功调用，调用后客户端会展示出游戏界面。
         */
        function gameLoadSuccess()

        /**
         *     -- 描述：游戏加载启动失败调用
         */
        function gameLoadFail()

        /**
         *     -- 描述：登陆连接服务器等已完成，加载结束，用户可开始操作时调用。
         */
        function gameAllReady()

        /**
         *     -- 描述：游戏正式开始时调用
         *     -- 参数：
         *     --  gameInfo | 当局游戏信息json:
         *     --       {
         *     --           
         *     --       }
         */
        function gameStart(gameInfo : string)

        /**
         *     -- 描述：游戏进入前台回调
         */
        let onShow: function()

        /**
         *     -- 描述：游戏进入后台回调
         */
        let onHide: function()
    }

    /**
     * 用户信息相关
     */
    export module User {
        /**
         *     -- 描述：客户端登录，获取code，openid（异步）
         *     -- 参数：
         *     --  cpId | 开发商id
         *     --  gameId | 游戏Id
         *     --  result | 结果回调 function result(string result):
         *     --      {
         *     --          ret,//回调状态，0为成功，其余为异常
         *     --          msg,//错误信息
         *     --          result: {
         *     --              string openId,
         *     --              string code,
         *     --              string roomId,
         *     --              int appId
         *     --          }
         *     --      }
         */
        function login(cpId : string, gameId : string, result : function(string))

        /**
         *     -- 描述：获取当前用户信息（异步）
         *     -- 参数：
         *     --  result | 结果回调 function result（string result):
         *     --      {
         *     --          ret,//回调状态，0为成功，其余为异常
         *     --          msg,//错误信息
         *     --          result: {
         *     --              string nickName,//昵称
         *     --              string sex,//0:女 1:男 其他值为未知
         *     --              string openId,//openId,需先进行登陆，否则拿不到openId
         *     --              string headerUrl,//头像链接
         *     --              string permissionCode//权限
         *     --          }
         *     --      }
         */
        function getCurrentUserInfo(result : function(string))

        /**
         *     -- 描述：上麦
         *     -- 参数：
         *     --  result | 结果回调 function result(string result):
         *     --      {
         *     --          ret,//回调状态，0为成功，其余为异常
         *     --          msg,//错误信息
         *     --          result:{
         *     --              string permissionCode,//权限
         *                     int micId //麦位Id,-1表示不在麦上(apiLevel2后已废弃，尽量不要使用)
         *     --          }
         *     --      }
         */
        function getMic(result : function(string))

        /**
         *     -- 描述：加入游戏（预留）
         */
        let joinGame: function()


        /**
         *     -- 描述：退出游戏（预留）
         */
        let exitGame: function()
    }


    /**
     * 界面相关
     */
    export module UI {
         /**
         *     -- 描述：显示消息提示框
         *     -- 参数：
         *     --  content | 提示文本内容
         */
        function showToast(content: string)

        /**
         *     -- 描述：展示某个用户的信息卡片。(apiLevel2以上才能使用，低于该版本调用无反应)
         *     -- 参数：{
         *     --          openId:string
         *     --      }
         */
        function showUserInfoCard(info:string)
    }

    /**
    * 通用逻辑相关
    */
    export module OpenApi {

        /**
        * 通用逻辑调用接口，
        * action ： 要执行的行为，字符串（注意内容数数字）,具体的行为定义参见文档
        * data: 参数数据，json字符串
        * callback: 回调，回调参数也是json字符串
        * 具体的方法以参数格式依据不同的业务会有所不同，以具体业务为主
        */
        function invoke(action : string, data : string, callback : function(string))
    }
}